return {
    "saghen/blink.cmp",
    dependencies = {
        "rafamadriz/friendly-snippets",
        "nvim-tree/nvim-web-devicons",
        "onsails/lspkind.nvim",
    },
    event = { "InsertEnter", "CmdlineEnter", "BufReadPost", "BufNewFile" },
    version = "1.*",
    opts = {
        signature = {
            enabled = true,
            window = {
                show_documentation = true,
            },
        },
        keymap = {
            ["<CR>"] = { "accept", "fallback" },
        },
        completion = {
            menu = {
                auto_show = true,
                border = "rounded",
                draw = {
                    columns = { { "label", "label_description", gap = 1 }, { "kind_icon", "kind", "source_name" } },
                    treesitter = { "lsp" },
                    components = {
                        kind_icon = {
                            ellipsis = false,
                            text = function(ctx)
                                local icon = ctx.kind_icon
                                if icon then
                                -- Do nothing
                                elseif vim.tbl_contains({ "Path" }, ctx.source_name) then
                                    local dev_icon, _ = require("nvim-web-devicons").get_icon(ctx.label)
                                    if dev_icon then
                                        icon = dev_icon
                                    end
                                else
                                    icon = require("lspkind").symbolic(ctx.kind, { mode = "symbol" })
                                end
                                return icon .. ctx.icon_gap
                            end,
                            highlight = function(ctx)
                                local hl = ctx.kind_hl
                                if hl then
                                elseif vim.tbl_contains({ "Path" }, ctx.source_name) then
                                    local dev_icon, dev_hl = require("nvim-web-devicons").get_icon(ctx.label)
                                    if dev_icon then
                                        hl = dev_hl
                                    end
                                end
                                return hl
                            end,
                        },
                    },
                },
                documentation = { auto_show = true, auto_show_delay_ms = 500 },
                trigger = {
                    show_on_keyword = true,
                },
            },
            documentation = {
                auto_show = true,
                auto_show_delay_ms = 200,
                window = {
                    min_width = 10,
                    max_width = 120,
                    max_height = 20,
                    border = "rounded",
                    winblend = 0,
                    winhighlight = "Normal:BlinkCmpDoc,FloatBorder:BlinkCmpDocBorder,EndOfBuffer:BlinkCmpDoc",
                    scrollbar = true,
                    direction_priority = {
                        menu_north = { "e", "w", "n", "s" },
                        menu_south = { "e", "w", "s", "n" },
                    },
                },
            },
            ghost_text = {
                enabled = true,
                show_with_selection = true,
                show_without_selection = false,
                show_with_menu = true,
                show_without_menu = true,
            },
        },
    },
    opts_extend = { "sources.default" },
    config = function(_, opts)
        require("blink.cmp").setup(opts)
    end,
}
